package com.micro.controller;

import java.util.HashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.micro.balance.LoadBalanceContext;

/**
 * LoadBalanceController类用于实现负载均衡的控制逻辑
 * 它使用一个Map来存储参与负载均衡的服务器及其对应的权重值
 * 在真实开发环境中，这个Map中的数据应该是动态获取的，例如从Zookeeper、本地缓存或数据库中获取
 *
 * 该控制器提供了/select接口，用于根据权重选择服务器
 */
@RestController
@RequestMapping("/loadbalance")
public class LoadBalanceController {

    // 定义一个Map来存储服务器及其权重值
    // key: 服务器标识
    // value: 权重值
    private Map<String,Integer> map=new HashMap<String,Integer>();

    /**
     * 初始化方法，用于填充服务器和权重的Map
     * 这里使用硬编码的方式添加数据，实际应用中应动态获取
     */
    @PostConstruct
    public void init() {
        map.put("aa",3);
        map.put("bb",1);
        map.put("cc",2);
        map.put("DD",1);
        map.put("EE",2);
        map.put("FF",2);
    }

    // 注入LoadBalanceContext，用于执行负载均衡选择逻辑
    @Autowired
    private LoadBalanceContext loadBalanceContext;

    /**
     * 使用随机算法选择服务器的接口
     *
     * @return 被选中的服务器标识
     */
    @RequestMapping("/select")
    public String select(){
        return loadBalanceContext.select(map);
    }

}
